package com.example.zsfinacialmanage.activity;

import android.annotation.SuppressLint;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.os.Bundle;

import androidx.appcompat.app.AppCompatActivity;

import com.example.zsfinacialmanage.R;
import com.example.zsfinacialmanage.utils.MyDBHelper;
import com.github.mikephil.charting.charts.LineChart;
import com.github.mikephil.charting.components.AxisBase;
import com.github.mikephil.charting.components.XAxis;
import com.github.mikephil.charting.components.YAxis;
import com.github.mikephil.charting.data.Entry;
import com.github.mikephil.charting.data.LineData;
import com.github.mikephil.charting.data.LineDataSet;
import com.github.mikephil.charting.formatter.IAxisValueFormatter;

import java.util.ArrayList;
import java.util.List;

public class DataAnalyseActivity extends AppCompatActivity {

    //1 定义对象
    LineChart income_chart,outpay_chart;
    MyDBHelper mhelper;
    SQLiteDatabase db;
    String[] indata={"学习-奖金","补助-奖金","比赛-奖励","业余-兼职","基本-工资","福利-分红","加班-津贴","其他"};
    //收入类型数据统计的初始值
    int  xxjjmoney=0;
    int bzjjmoney=0;
    int bsjlmoney=0;
    int yyjzmoney=0;
    int jbgzmoney=0;
    int  flfhmoney=0;
    int jbjtmoney=0;
    int qtmoney=0;
    String[] outdata={"电影-娱乐","美食-畅饮","欢乐-购物","手机-充值","交通-出行","教育-培训","社交-礼仪","生活-日用","其他"};
    //收入类型数据统计的初始值
    int  dyylmoney=0;
    int mscymoney=0;
    int hlgwmoney=0;
    int sjczmoney=0;
    int jtcxmoney=0;
    int  jypxmoney=0;
    int sjlymoney=0;
    int shrymoney=0;
    int othermoney=0;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_data_analyse);

        //2 绑定控件
        initView();

        //3 收入汇总分析
        inComeData();

        //4 支出汇总分析
        outComeData();
    }

    //2 绑定控件---------------代码
    private void initView() {
        income_chart=findViewById(R.id.income_chart_data);
        outpay_chart=findViewById(R.id.outpay_chart_data);
        mhelper=new MyDBHelper(DataAnalyseActivity.this);
        db=mhelper.getWritableDatabase();
    }

    //3 收入汇总分析-------------------代码



    private void inComeData() {
        //第一部分：获取数据
        Cursor cursor =db.rawQuery("select * from in_come",null);
        while(cursor.moveToNext()){
            @SuppressLint("Range") Double mymoney=cursor.getDouble(cursor.getColumnIndex("inmoney"));
            @SuppressLint("Range") String mytype=cursor.getString(cursor.getColumnIndex("intype"));
            if(mytype.equals("学习-奖金")){
                xxjjmoney+=mymoney;
            }else if(mytype.equals("补助-奖金")){
                bzjjmoney+=mymoney;
            }else if(mytype.equals("比赛-奖励")){
                bsjlmoney+=mymoney;
            }else if(mytype.equals("业余-兼职")){
                yyjzmoney+=mymoney;
            }else if(mytype.equals("基本-工资")){
                jbgzmoney+=mymoney;
            }else if(mytype.equals("福利-分红")){
                flfhmoney+=mymoney;
            }else if(mytype.equals("加班-津贴")){
                jbjtmoney+=mymoney;
            }else if(mytype.equals("其他")){
                qtmoney+=mymoney;
            }
        }
        //第二部分：LineChart图表初始化设置---Xy轴的设置
        XAxis xAxis=income_chart.getXAxis();//获取此图表的x轴轴线
        YAxis yAxisleft =income_chart.getAxisLeft();//获取此图表的Y轴左侧轴线
        YAxis yAxisright =income_chart.getAxisRight();//获取此图表的Y轴右侧轴线
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴线的位置为底部
        //初始化
        yAxisleft.setAxisMinimum(0f);//保证Y轴从0开始，不然会上移一点。
        yAxisright.setAxisMinimum(0f);

        xAxis.setValueFormatter(new IAxisValueFormatter() {//x轴自定义标签的设置
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {
                return indata[(int) v];
            }
        });
        //第三部分:LineDataSet曲线初始化设置
        List<Entry> inentries=new ArrayList<>();//Y轴的数据
        // 创建 Entry 对象列表：
        //
        //List<Entry> inentries = new ArrayList<>();：这行代码初始化了一个 Entry 对象的列表。在图表库中，Entry 对象代表图表中的一个点，包含一个X轴和一个Y轴的值。
        //inentries.add(new Entry(...));：这些行将每种收入类型的累计金额作为Y轴值，与对应的X轴索引（表示收入类型）一起，添加到 inentries 列表中。
        inentries.add(new Entry(0,xxjjmoney));
        inentries.add(new Entry(1,bzjjmoney));
        inentries.add(new Entry(2,bsjlmoney));
        inentries.add(new Entry(3,yyjzmoney));
        inentries.add(new Entry(4,jbgzmoney));
        inentries.add(new Entry(5,flfhmoney));
        inentries.add(new Entry(6,jbjtmoney));
        inentries.add(new Entry(7,qtmoney));
        //LineDataSet lineDataSet = new LineDataSet(inentries, "金额");：创建一个 LineDataSet 对象，代表图表中的一条线。inentries 作为数据点集合，"金额" 为这条线的标签。
        //设置 LineDataSet 的属性：
        LineDataSet lineDataSet=new LineDataSet(inentries,"金额");//代表一条线,“金额”是曲线名称
        lineDataSet.setValueTextSize(14);//曲线上文字的大小
        lineDataSet.setValueTextColor(Color.GREEN);//曲线上文字的颜色
        lineDataSet.setDrawFilled(false);//设置折线图填充
        lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);//设置线条为曲线
        lineDataSet.setColor(Color.GREEN);//设置曲线的颜色

        //设置 X 轴标签的字体颜色
        xAxis.setTextColor(Color.WHITE);
        //设置 Y 轴标签的字体颜色
        yAxisleft.setTextColor(Color.WHITE);
        yAxisright.setTextColor(Color.WHITE);

        // lineDataSet.setValueTextSize(25);：设置图表上每个数据点标签的文字大小。
        //lineDataSet.setValueTextColor(Color.WHITE);：设置数据点标签的文字颜色。
        //lineDataSet.setDrawFilled(true);：设置折线图为填充模式，即从线下到X轴之间的区域会被填充颜色。

        //创建 LineData 对象并设置到 LineChart 控件上：
        //第四部分：曲线展示
        LineData data=new LineData(lineDataSet);//创建LineData对象 属于LineChart折线图的数据集合
        income_chart.setData(data);// 添加到图表中
        // LineData data = new LineData(lineDataSet);：创建 LineData 对象，它是整个折线图的数据集合，可以包含一个或多个 LineDataSet。
        //income_chart.setData(data);：将 LineData 对象设置到 income_chart 控件上，这会导致折线图使用提供的数据进行绘制。
    }



    //4 支出汇总分析--------------------代码
    private void outComeData() {
        //第一部分：获取数据
        Cursor cursor =db.rawQuery("select * from pay_out",null);
        while(cursor.moveToNext()){
            @SuppressLint("Range") Double mymoney=cursor.getDouble(cursor.getColumnIndex("outmoney"));
            @SuppressLint("Range") String mytype=cursor.getString(cursor.getColumnIndex("outtype"));
            if(mytype.equals("电影-娱乐")){
                dyylmoney+=mymoney;
            }else if(mytype.equals("美食-畅饮")){
                mscymoney+=mymoney;
            }else if(mytype.equals("欢乐-购物")){
                hlgwmoney+=mymoney;
            }else if(mytype.equals("手机-充值")){
                sjczmoney+=mymoney;
            }else if(mytype.equals("交通-出行")){
                jtcxmoney+=mymoney;
            }else if(mytype.equals("教育-培训")){
                jypxmoney+=mymoney;
            }else if(mytype.equals("社交-礼仪")){
                sjlymoney+=mymoney;
            }else if(mytype.equals("生活-日用")){
                shrymoney+=mymoney;
            }else if(mytype.equals("其他")){
                othermoney+=mymoney;
            }
        }
        //第二部分：LineChart图表初始化设置---Xy轴的设置
        XAxis xAxis=outpay_chart.getXAxis();//获取此图表的x轴轴线
        YAxis yAxisleft =outpay_chart.getAxisLeft();//获取此图表的Y轴左侧轴线
        YAxis yAxisright =outpay_chart.getAxisRight();//获取此图表的Y轴右侧轴线
        xAxis.setPosition(XAxis.XAxisPosition.BOTTOM);//设置X轴线的位置为底部
        yAxisleft.setAxisMinimum(0f);//保证Y轴从0开始，不然会上移一点。
        yAxisright.setAxisMinimum(0f);
        xAxis.setValueFormatter(new IAxisValueFormatter() {//x轴自定义标签的设置
            @Override
            public String getFormattedValue(float v, AxisBase axisBase) {
                return outdata[(int) v];
            }
        });
        //第三部分:LineDataSet曲线初始化设置
        List<Entry>   outentries=new ArrayList<>();//Y轴的数据
        outentries.add(new Entry(0,dyylmoney));
        outentries.add(new Entry(1,mscymoney));
        outentries.add(new Entry(2,hlgwmoney));
        outentries.add(new Entry(3,sjczmoney));
        outentries.add(new Entry(4,jtcxmoney));
        outentries.add(new Entry(5,jypxmoney));
        outentries.add(new Entry(6,sjlymoney));
        outentries.add(new Entry(7,shrymoney));
        outentries.add(new Entry(8,othermoney));
        LineDataSet lineDataSet=new LineDataSet(outentries,"金额");//代表一条线,“金额”是曲线名称
        lineDataSet.setValueTextSize(14);//曲线上文字的大小
        lineDataSet.setValueTextColor(Color.RED);//曲线上文字的颜色
        lineDataSet.setDrawFilled(false);//设置折线图填充
        lineDataSet.setMode(LineDataSet.Mode.CUBIC_BEZIER);//设置线条为曲线
        lineDataSet.setColor(Color.RED);//设置曲线的颜色
        //设置 X 轴标签的字体颜色
        xAxis.setTextColor(Color.WHITE);
        //设置 Y 轴标签的字体颜色
        yAxisleft.setTextColor(Color.WHITE);
        yAxisright.setTextColor(Color.WHITE);
        //第四部分：曲线展示
        LineData data=new LineData(lineDataSet);//创建LineData对象 属于LineChart折线图的数据集合
        outpay_chart.setData(data);// 添加到图表中
    }
}